package com.liu.io;

import java.io.*;

/**
 * 文件读写
 */
public class FileUtil {
//	private static String filePath = "";

//	public String getFilePath() {
//		return filePath;
//	}

//	public void setFilePath(String filePath) {
//		FileUtil.filePath = filePath;
//	}

	public FileUtil() {
		super();
	}

//	public FileUtil(String filePath) {
//		super();
//		this.filePath = filePath;
//	}

//	public static File initFile() {
//		File file = new File(filePath);
//		// 获取父目录
//		String dirs = file.getParent();
//		File fileDirs = new File(dirs);
//		// 路径中的目录是否存在。
//		if (!fileDirs.exists()) {
//			boolean bMkdirs = fileDirs.mkdirs();
//			System.out.println("创建不存在的父目录" + dirs + "\t创建结果：" + bMkdirs);
//		}
//
//		// 路径中的文件是否存在。
//		if (!file.exists()) {
//			boolean bCreateNewFile = false;
//			try {
//				bCreateNewFile = file.createNewFile();
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//			System.out.println("创建新的空文件" + bCreateNewFile);
//		}
//		return file;
//	}

	public static File initFile(String filePath) {
		File file = new File(filePath);
		// 获取父目录
		String dirs = file.getParent();
		File fileDirs = new File(dirs);
		// 路径中的目录是否存在。
		if (!fileDirs.exists()) {
			boolean bMkdirs = fileDirs.mkdirs();
			System.out.println("创建不存在的父目录" + dirs + "\t创建结果：" + bMkdirs);
		}

		// 路径中的文件是否存在。
		if (!file.exists()) {
			boolean bCreateNewFile = false;
			try {
				bCreateNewFile = file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.out.println("创建新的空文件" + bCreateNewFile);
		}
		return file;
	}

	public static void main(String[] args) throws IOException {
		String inFilePath = "/Users/liubo/Downloads/file.txt";
		String outFilePath = "C:\\Users\\12961\\Desktop\\new\\bb.txt";
		/**
		 * 字节流
		 */
		// 读取
		FileUtil.fileInStream(FileUtil.initFile(inFilePath));
		/**
		 * 字符流（纯文本）
		 */
		// 读取
//		FileUtil.fileReaderByChar(initFile(inFilePath));
		String readerByLine = FileUtil.fileReaderByLine(FileUtil.initFile(inFilePath));

		// 写入
		FileUtil.fileWriter(FileUtil.initFile(outFilePath), true, "true续写，false覆盖");
	}

	public static String fileInStream(File file) {
		StringBuffer str = new StringBuffer();
		FileInputStream is = null;
		BufferedInputStream bis = null;
		try {
			is = new FileInputStream(file);
			bis = new BufferedInputStream(is);
			int len = 0;
			byte[] be = new byte[1024];
			while ((len = bis.read(be)) != -1) {
				str.append(new String(be, 0, len));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (bis != null) {
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return str.toString();
	}

	/**
	 * 将数据写入文件中
	 *
	 * @param file
	 *            输出文件
	 * @param append
	 *            是否保存之前的内容
	 * @param data
	 *            输出数据
	 */
	public static void fileWriter(File file, boolean append, String data) {
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter(file, append);
			fileWriter.write(data);
			// 输出流进行刷新，将字符写到目的文件中。
			fileWriter.flush();
//			fileWriter.write("\n" + data);
//			// 输出流进行刷新，将字符写到目的文件中。
//			fileWriter.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("写入数据失败");
		} finally {
			try {
				if (fileWriter != null) {
					fileWriter.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 字符流读取文本：一行行读取
	 *
	 * @param file
	 */
	public static String fileReaderByLine(File file) {
		StringBuffer str = new StringBuffer();
		FileReader fr = null;
		BufferedReader br = null;
		try {
			fr = new FileReader(file);
			br = new BufferedReader(fr);
			String s = null;
			while ((s = br.readLine()) != null) {
				str.append(s);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (br != null) {
					br.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if (fr != null) {
					fr.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return str.toString();
	}

	/**
	 * 字符流读取文本：一个个字符读取
	 *
	 * @param file
	 */
	public static String fileReaderByChar(File file) {
		StringBuffer str = new StringBuffer();
		char[] cr = new char[1024];
		FileReader fr = null;
		try {
			fr = new FileReader(file);
			int it = -1;
			while ((it = fr.read(cr)) != -1) {
				str.append(cr);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (fr != null) {
					fr.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return str.toString();
	}
}
